home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / BUS / LogicSim 3.0b Folder.sit / LogicSim 3.0b Folder / LogicSim 3.0b ƒ / LogicSim SDK 2.7 / SDK 2.6 doc < prev    next >
Text File  |  1995-08-01  |  8KB  |  192 lines

  1.  
  2. LogicSim S.D.K. 2.6
  3.  
  4. Warning:  LogicSim 2.6 code resources are not compatible with older versions.of LogicSim .
  5.  
  6.  
  7. What is LogicSim SDK 2.6 ?
  8.  
  9. This software development kit (SDK) allows you to create your own components to add to the list of standard components provided with LogicSim.  Of course, modules created by using the "Create module" command are used in exactly the same way as components but with this SDK programmers can write components in Pascal (or C/C++ with more work) and have total control of their behaviour and appearance.  Such compnents execute sigificantly faster than modules. 
  10.  
  11. I am only giving general information about the SDK here.  The best way to learn how to use it it is to study in detail how the Counter1 example, included with this package, works.
  12.  
  13. Note:  most of the standard LogicSim components, even the ones not in external code resources, use only the API documented here .
  14.  
  15.  
  16.  
  17. Structure of a component
  18.  
  19. A component manipulates 3 types of objects: the class,  symbols and gates.
  20. There is only one class object for  a component type, but there may be several instances of symbols or gates.
  21. ・ The class contains global data for the component type (typically its picture and its pin descriptions).
  22. ・ Symbols are visual representations that are drawn on LogicSim main windows.  They also handle mouse clicks during simulation. 
  23. ・ Gates are logical representations of  components.  They are created when the simulation is launched (which is sometimes somewhat slow !).  They perform all the logical operations.
  24.  
  25.  
  26.  
  27. The component code resource
  28.  
  29. In concrete terms a code-component is a single code resource (ID = 128, type='PROC') in a resource file (type = 'LSep').  It looks like any CDEF, WDEF or LDEF.  At each call the main procedure looks at an integer parameter called  "message" and must take the action that is required.
  30.  
  31. The entry of the code resource must look like:
  32. procedure ComponentProc (var blk: LSBlock);
  33. where blk is a block of parameters.
  34.  
  35. The message is written in the field 'msg' of the blk record.  Not all of the other fields of an LSBlock have a significant meaning for a given message.
  36.  
  37.  
  38.  
  39. Component messages
  40.  
  41. Class messages
  42.  
  43. ・ msgNewClass
  44.  
  45. The application sends this message when a new class is loaded.  The component proc must describe the component and allocate any global data it needs.
  46.  
  47. The classDatas field of the structure LSBlock is a Handle which is already allocated.  You may want to resize it with SetHandleSize to store in it your class datas. This Handle will be given in the block for any other messages that will be send.
  48.  
  49. You must supply your class name in the field prmClass^.name and its ID in prmClass^.id.  This ID is a variable of type ClassIDType which is a record whith only one field (name).  To avoid problems the ID and the name should be equal :
  50.  
  51.     prmClass^.name := myName;
  52.     SetClassID(prmClass^.id, myName); { or prmClass^.id.name:= myName }
  53.  
  54. You give the picture that will be used for displaying the component in the component list (on the left of the window) in prmClass^.image .  This is not necessarily the same picture as the one that may be used for drawing in the circuit. If you use a PICT resource don't forget to detach it with DetachResource(Handle(myPicture)) because the file is closed after the msgNewClass message processing.
  55.  
  56. You specify the pins of your component with the procedure LSDeclarePin:
  57.  
  58.     var
  59.     delaysP: DelaysPtr;
  60.     pinPos: Point;
  61.    ...
  62.     delaysP := NIL; {default delays = 0,0,0,0,0,0 }
  63.     SetPoint(pinPos,50,5);
  64.           LSDeclarePin(blk.env, blk.classRef, pinPos, kOutputPin, delaysP, 'out');
  65.  
  66. (pinPos is the position of the pin relative to the component frame, kOutputPin means that it is an output (otherwise use kInputPin), delaysP=nil means that LogicSim will use default delays, and the last parameter is the name of the pin)
  67.  
  68. ・    msgDisposeClass
  69.  
  70. The component procedure is called with this message when the class is about to be destroyed.
  71. *Don't* dispose of the handle classDatas with Disposehandle  !  Since it was allocated by the application, it is destroyed by it too.
  72.  
  73. Symbol messages
  74.  
  75. ・    msgNewSymbol
  76.  
  77. This message is sent when a new symbol is created.  You can resize the Handle symbolDatas to store any data.
  78.  
  79. ・    msgDisposeSymbol
  80.  
  81. The message is sent when a symbol is about to be destroyed.  As with msgDisposeClass, do NOT DisposeHandle(symbolDatas).
  82.  
  83. ・    msgSimClick
  84.  
  85. When the user clicks a component during the simulation, LogicSim sends a msgSimClick message to the component procedure.  As a result, for instance, the component may change an output value or its appearance.
  86.  
  87. ・ msgDrawSymbol
  88.  
  89. This message is sent when a symbol must be redrawn.  The field prmSymbol^.frame is a Rect that indicates the position of the component.  You must draw in the current port.  Don't change the clip region or the background colour.
  90.  
  91. ・ msgOptionDialog
  92.  
  93. ・ msgCanOptionDialog
  94.  
  95. ・ msgSetSymbolParams
  96.  
  97. ・ msgGetSymbolParams
  98.  
  99. Gate messages
  100.  
  101. ・    msgNewGate
  102.  
  103. ・    msgDisposeGate
  104.  
  105. ・    msgReset
  106.  
  107. ・    msgSimulation
  108.  
  109. ・    msgTimer
  110.  
  111. ・    msgGetGateParams
  112.  
  113. ・    msgStimuli
  114.  
  115.  
  116.  
  117. LogicSim procedures for components
  118.  
  119. Class procedures
  120.  
  121.  procedure LSDeclarePin (env: LSEnvPtr;
  122.                                     classRef: ClassRefT;
  123.                                     loc: Point;
  124.                                     kind: Integer;
  125.                                     delays: DelaysPtr;
  126.                                     name: Str63);
  127.  
  128. Describes a new pin.
  129. env is a block of pointers to LogicSim internal procedures.
  130. classRef is the reference of the component class.
  131. loc is the position of the pin relative to the component symbol frame.
  132. kind indicates whether the pin is an input (kInputPin) or an output (kOutputPin).
  133. delays is a pointer to a structure that contains 6 delays (of real type Extended).  You should use NIL (i.e. default delays).
  134. name is name of the pin.  It is not used in the current version of LogicSim (2.6).
  135.  
  136.  
  137. Symbol procedures
  138.  
  139.     procedure LSInvalSymbol (env: LSEnvPtr;
  140.                                     symbolRef: SymbolRefT);
  141.  
  142. Tell LogicSim that it must redraw a component symbol.  To redraw a symbol you cannot simply call the component procedure because the port is not ready.
  143. env is a block of pointers to LogicSim internal procedures.
  144. symbolRef is the reference of the symbol to be redrawn.
  145.  
  146.     procedure LSLoop (env: LSEnvPtr;
  147.                                     symbolRef: SymbolRefT);
  148.  
  149. Tell LogicSim to do normal event processing.  This call is only useful in special cases, for example when you are waiting for a "mouse up" after having received a msgSimClick message (that's what the standard component "button" does).
  150. env is a block of pointers to LogicSim internal procedures.
  151. symbolRef is the reference of the symbol that has received the mouse click.
  152.  
  153. Gate procedures
  154.  
  155.     procedure LSGetInput (env: LSEnvPtr;
  156.                                     gateRef: GateRefT;
  157.                                     pin: Integer;
  158.                                     var value: SValue);
  159.  
  160.     procedure LSSetOutput (env: LSEnvPtr;
  161.                                     gateRef: GateRefT;
  162.                                     pin: Integer;
  163.                                     value: SValue);
  164.  
  165.     procedure LSForceGateSim (env: LSEnvPtr;
  166.                                     gateRef: GateRefT);
  167.  
  168.     procedure LSAddTimer (env: LSEnvPtr;
  169.                                     gateRef: GateRefT;
  170.                                     date: STime);
  171.  
  172.     procedure LSPrintMsg (env: LSEnvPtr;
  173.                                     symOrGate: univ Ptr;
  174.                                     theMessage: Str255);
  175.  
  176. Utilities
  177.  
  178.     function LSStimNewValueCmd (env: LSEnvPtr;
  179.                                     cmd: StringPtr;
  180.                                     var v: SValue): Boolean;
  181.  
  182.     function CompareClassID (id1, id2: ClassIDType): Boolean;
  183.     procedure SetClassID (var id: ClassIDType;
  184.                                     s: Str63);
  185.  
  186.     function LogicAND (a, b: SValue): SValue;
  187.     function LogicOR (a, b: SValue): SValue;
  188.     function LogicNOT (a: SValue): SValue;
  189.     function PositiveEdge (oldV, newV: SValue): Boolean;
  190.  
  191.  
  192.